JavaScript é um recurso nativo do browser que permite fazer interações inteligentes com os usuários e elementos da página.
Em termos gerais, o JavaScript é uma 'linguagem de programação' que roda dentro do browser que faz com que uma página web tenha um comportamento ou mesmo funcionalidades muito semelhantes as funcionalidades de uma aplicação desktop comum.
Atualmente conta com uma segurança reforçada dos sites que garante que sua aplicação web feita em JavaScript não 'acesse' nada mais do que o conteúdo do seu site. Chamamos isso de uma aplicação compartimentalizada, ou seja, fechada em si mesma.
Ele tem a capacidade de funcionar dentro do browser sem precisar de qualquer recurso externo (normalmente) o que o torna ideal para interagir com o usuário tornando-se companheira inseparável dos usuários pelo caráter cooperativo que foi dado a ele e aliviando o servidor destas tarefas.
A interação com o usuário é um dos pontos fortes do javascript, como exemplo, emitir um alerta sobre algum problema como no preenchimento de campos e, este erro sendo detectado antecipadamente, evita o envio das informações para o servidor, processamento e o retorno do servidor para o cliente informando sobre a rejeição dos mesmos. Evita desperdício de tempo e recursos.
Na interação com os elementos da página podemos pedir ao javascript que preencha um campo assim que o usuário fizer uma escolha. Por exemplo, no carrinho de compras ele aumentou a quantidade para 2 do mesmo item e o cálculo do custo é feito automaticamente sem envolver servidor ou qualquer outro recurso fora do browser.
Nas últimas gerações esta linguagem foi tão frequentemente utilizada que foi implementada em todos sistemas operacionais e cada vez mais os recursos nesses sistemas estão sendo padronizados evitando 'customizações' para rodar no sistema A ou B.
Ela é tão utilizada que foi desenvolvido em todos os sistemas um recurso chamado web view que permite exibir 'html,css,javascript' fora do browser .
Aproveitando esse gancho, como o web view, foram criadas ferramentas como o NodeJS que permite desenvolver aplicações para esse recurso, ou seja, permite criar uma 'aplicação web' rodando dentro do 'web view' que parece, e muito, com uma aplicação nativa do sistema. Só dá para perceber que é uma aplicação web pelo visual e recursos bem melhorados em relação a uma aplicação desktop convencional.
É tão poderosa que implementa alguns recursos melhor (pelo menos mais pratico) que outras excelentes linguagens web como o Java. Para que vou usar ambientes pesadíssimos como um Eclipse, Netbeans se dentro do browser já tem alguém que faça a mesma funcionalidade ?
Se trabalha com ambientes de alta-produtividade como o ASP-NET verá que seja o que for que você utilize, por mais sofisticado que seja o componente utilizado, tudo acaba em HTML, CSS e JavaScript sendo que o JavaScript é gerado automaticamente pelo sistema (ou ambiente .NET) sem que o usuário precise escrever uma linha de código JavaScript.
Contudo nem tudo é um mar de rosas com o JavaScript. Ele possui duas falhas que dificilmente serão superadas mesmo nas futuras gerações da linguagem.
O primeiro problema do JavaScript é o sua depuração e tratamento de erros. Muitas vezes só conseguimos descobrir o erro depois que rodamos o código JavaScript. Como ela é uma linguagem interpretada a maioria dos erros é 'late binding', ou seja, só são somente descobertos no momento que são executados.
Excelentes interfaces de desenvolvimento (IDEs), como o Visual Studio Community Edition ou o Visual Studio Code, conseguem até indicar um erro de semântica informando que a instrução correta é getElementById e não outra qualquer mas esse 'auxílio' é restrito a ide e algumas vezes ajudam mas não o suficiente para evitar, por exemplo, um erro de tipo ou valor de variável.
Felizmente graças aos avanços do browser temos o console de depuração javascript que permite visualizar a interação entre HTML, CSS e JavaScript e ajuda muito a depurar os erros do JavaScript.
O segundo grande problema do JavaScript é a produtividade. Esse é o principal motivo de usar os frameworks como JQuery, BootStrap...porque eles tem um monte de funções úteis já desenvolvidas e testadas para você usar no seu código.
Se você desenvolve com qualquer uma ferramenta web já deve ter notado que quando chega no JavaScript a criação/depuração do código
toma muito tempo se comparado com o desenvolvimento da mesma funcionalidade em ferramentas diferentes. Já vi excelentes analistas
ficarem um dia inteiro para depurar um JavaScript com umas 50 linhas ( no máximo ) de código que implementava um carrinho de compras.
Ficou ótimo mas a que custo ? E a manutenção posterior ?...com certeza será o mesmo Kama-Sutra.
Certas funcionalidades embutidas no Browser como no AJAX, o javascript fica muito dependente do site do que implementa a funcionalidade e, muitas vezes, essas funcionalidades demoram para responder dando a impressão que o problema é o AJAX ou JavaScript mas na realidade é o site que demorou a processar e retornar com as informações. Exemplo disso é o outlook da Microsoft.
Fora do browser a grande falha do JavaScript é que ele não possui, ainda, boas interfaces gráficas direcionadas para a depuração do Javascript e muitas vezes são tão primitivas que pra nós parece que estamos trabalhando com martelo e talhadeira no projeto, como no caso do prompt de comando. Você precisa iniciar o processo - no caso iniciar o motor v8 do NodeJS, por exemplo, pra começar a trabalhar com o recurso.
Lembre-se...ninguém te paga para fazer o código mas sim para resolver problemas. Quanto mais rápido e eficiente for, melhor é a ferramenta.
Lembre-se também que é muito legal quando você vê seu código rodando a primeira vez mas, na vida, o que vale é quanto que vão te pagar para você
fazer o código que o cliente precisa e lhe garanto que não será um 'hello world'.
Felizmente na parte de depuração a interface foi muito melhorada. Pressionando F12 no browser abre o painel de depuração do Browser e ele expõe os elementos da página, tamanho, cores, formas etc. de uma forma que agora, pelo menos quando a página já estiver carregada, todas as informações estejam disponíveis aos usuários.
O JavaScript nasceu com o nome LiveScript. Basicamente era um mecanismo ('engine') de C++ que executava
programas fontes c interpretando seu código fonte. O browser chamava o 'componente externo' ( do sistema operacional ) que se encarregava de
compilar e executar o código.
Se você conhece bem web sabe que hoje nenhum browser faz isso, chamar o sistema operacional diretamente. Hoje todo browser pode chamar componentes
dentro de sua camada de aplicação...dentro das suas pastas da aplicação.
Até hoje no Linux e Unix podemos chamar códigos C em qualquer parte do sistema que o sistema operacional compila e executa a aplicação. Contudo hoje
já conta com restrições de acesso e uma delas é que não pode ser ativada pelo web browser.
Era pequeno, compacto, mas não fez sucesso porque era ofuscado pelo C++ que possuía um leque de funcionalidades invejáveis.
Contudo C++ era um componente pesado para ser carregado ( quanto mais funcionalidades, mais pesado ) e, por isso, a grande maioria das linguagens C que
faziam sucesso na época eram compiladas e este modelo, até hoje, C++ é a linguagem que mais se aproxima do assembler que é a linguagem nativa do processador
e por esse motivo a mais eficiente possível.
Mas as mesmas características que o condenaram foram as que o tornaram perfeitas para ser encaixado no browser de qualquer fabricante. O LiveScript foi adaptado para acessar os objetos do DOM do navegador e foi retirado dele o conceito de classes (veremos a seguir) fazendo com que ficasse muito simples e tivesse seu uso restrito ao navegador e mudaram o nome para JavaScript.
Como foi dito em alguns documentos deste site como Funcionamento Internet.html a Internet não nasceu o monstro que ela é hoje. Os primeiros browsers surgiram com a finalidade de matar as aplicações que as BBS forneciam porque cada uma aplicação tinha seu jeito, personalizada para o provedor e o cliente tinha que 'rebolar' para achar o que precisava. Não eram nada amigáveis. Se vocês nunca viram, ótimo, não perderam nada.
Um dos primeiros browsers foram o WorldWideWeb (criado por Tim Berners-Lee) e o ViolaWWW, que surgiu no mercado em março de 1992. Nessa época se você falasse para colocar o conteúdo da Internet num disquete era possível, em um ou dois disquetes (1,44 MB Cada).
Foi ai que foi lançado o Mosaic que nasceu praticamente junto com a Internet em 22 de abril de 1993.
Aí houve o grande boom...as empresas aderiram em massa a Internet (exceto a Microsoft que não acreditava
na Internet) e a expansão da Internet foi literalmente exponencial.
Com o browser Mosaic estabeleceu-se o padrão que temos hoje, fácil de navegar e não importando aonde você vá o browser exibe um documento mais amigável, intuitivamente mais simples de operar e claro, seguindo um padrão em todos os sites e isso agradou muito os usuários.
Contudo o conteúdo da Internet era basicamente estático e essa característica precisava ser mudada rapidamente especialmente a pedido dos bancos e empresa que queriam agilizar seus negócios e, se com o telefone foi uma revolução, imagine uma comunicação direta entre computadores, empresas e clientes.
Uma coisa que surgiu nessa época e 'surtou' foi o e-mail. Inúmeras empresas tentando angariar possíveis
clientes começaram a adicionar serviços ao browser e o e-mail foi um dos mais populares nessa época.
Até o moto-boy da empresa sentava na frente do computador par ver seus e-mails.
Foi um 'percursor' do whatsup de hoje.
Oficialmente JavaScript foi lançado em Dezembro de 1995 quando a Netscape lançou o
Netscape Navigator 2. O lançamento foi feito em conjunto com a Sun Microsystems que
foi uma grande colaboradora no desenvolvimento da linguagem.
Depois disso se tornou obrigatório em todos os browsers pelas
funcionalidades que ele agregava a página web.
O Javascript é uma linguagem baseada em scripts, ou seja, um texto interpretado por um mecanismo (dentro do browser). Como disse javascript é um programa escrito totalmente em texto interpretado pelo browser, o que torna seguro, embutido dentro do próprio conteúdo da página web e foi chamado de script para diferenciar de um texto comum porque o script contém instruções e é um programa e não um texto comum.
O JavaScript, por ser texto simples, não é compilado mas sim interpretado seja onde for que esteja
sendo executado. Isto garante uma 'independência' do ambiente operacional
(windows, linux, etc) ou da plataforma que está executando a linguagem dando ao JavaScript uma
compatibilidade entre diversas plataformas, ou seja, o mesmo script roda em diferentes sistemas.
Mas nem tudo é perfeito, sendo interpretada a linguagem torna-se ligeiramente mais lerda que as
linguagens compiladas mas para os usuários comuns não é um fator significativo ou mesmo notável.
Outro problema é que muitos erros passam despercebidos. Sem uma função do JavaScript chama-se
getElementById e você digita getelementbyid
isso provocará um erro que só será descoberto no momento
da execução do script
. É o que chamamos de late binding, ou seja, só na execução o recurso é
exigido.
Como a linguagem tem um monte de recursos foram inseridos alguns itens de segurança. Por exemplo, não pode acessar
nada na máquina que não seja da própria página como ler um arquivo na máquina do cliente, por exemplo.
Se ele tem um recurso para imprimir, por motivos de segurança, sempre que for imprimir ele pede a confirmação
do usuário sobre se deve ou não imprimir e com isto evita que alguém gaste o papel sem autorização do usuário.
NÃO..nada haver. São nomes de duas tecnologias completamente diferentes. Java é um ambiente de execução de funcionalidades que funciona sobre uma máquina virtual que 'independe' do sistema operacional e JavaScript é um mecanismo de execução de scripts embutidos em todos os browsers. A única coisa em comum neles é que foram escritos na linguagem c.
Quando um servidor envia uma página ao usuário ele, depois de terminar o envio da página, ele simplesmente se desconecta e o browser faz toda a interface de apresentação e interação com o usuário. Só que o browser é bem limitado, ele exibe e tem alguma interação mas muito pouca inteligência e essa inteligência precisaria ser muito melhor, 'programável' para que atuasse em pontos específicos e em situações específicas.
Com essa 'inteligência' ou 'algum recurso extra' (providos hoje pelo JavaScript) evitaríamos alguns transtornos do tipo, o usuário queria fazer uma transferência de dinheiro no banco e no campo valor ele colocou cem reais e o banco esperava que fosse 100,00 ou 100.00. Um simples espaço ou R$ colocado a mais na quantia poderia atrapalhar a transação .
Sendo assim foi incorporado um 'script engine' no browser para que alertasse o usuário sobre falhas ou possíveis
problemas sobre o que os programadores do site pensaram e o que o cliente entendeu que era para ser feito ou algum
detalhe que passou desapercebido pelo usuário mas é importante para a empresa.
Citando outro exemplo onde javascript é muito empregado é no envio de dados digitados pelo usuário ao servidor.
Caso ele se esqueça de preencher uma data, um valor ou mesmo digite uma data inválida foi dado ao javascript recursos
para poder verificar validade de datas, valores numéricos entre outras coisas.
Com certeza javascript aproximou a interatividade da aplicação web com a aplicação desktop.
O JavaScript é executado dentro de uma página HTML pelo próprio browser.
Normalmente ele é ativado por um evento
como um click num botão (evento onclick), pela alteração de valor
de um campo (onchange), ao receber o o foco (onfocus), quando uma tecla for
pressionada(onkeydown) ou solta (onkeyup) e na maioria dos eventos disponíveis
dos elementos html podemos colocar um script para atuar.
Sim, todo desenvolvedor web tem que conhecer muito bem HTML, CSS e JavaScript.
Digamos que é o pacote básico. Você pode conhecer muito bem qualquer outra
tecnologia mas, em desenvolvimento web, se você não conhece esses três
elementos você é analfabeto.
Todos são executados conjuntamente na página com a sequencia de sua definição de cima para baixo,
exatamente como lemos uma página de um livro.
Portanto a coisa começa com HTML mas podemos ter CSS no meio do HTML alterando
alguns estilos, alguns scripts no meio e tudo isso é uma salada chamada
página web.
Note que parece não ter uma ordem mas tem sim, primeiro precisamos criar um elemento
e depois o javascript para atuar com ele, se for o contrário o browser não tem como
associar um evento a uma coisa que não existe, dá erro.
1-O JavaScript se não estiver dentro de uma função é executado conforme a página é carregada, exatamente no ponto onde foi definido. Portanto ao referenciar um objeto da página em JavaScript tenha certeza que ele foi renderizado antes do código JavaScript.
Exemplo:
Isto causará um erro :
<script> document.getElementsByName("num").innerHTML='Teste';</script>
<td name="num"></td>
Isto funcionará sem problemas :
<td name="num"></td>
<script> document.getElementsByName("num").innerHTML='Teste';</script>
2-Costumamos colocar o código javascript dentro de funções definidas no header da página porque se mesmo no carregamento da página quisermos executar um script de inicialização ele estará pronto para ser executado.
3-É aconselhável antes de executar um código JavaScript que referencie o DOM
aguardar a carga completa do documento antes de executar o script porque pode
ser que o elemento ainda não tenha sido renderizado.
Para aguardar a carga completa do documento HTML utilizando o DOM temos as
seguintes possibilidades dentro do JavaScript puro:
3.1-Uma das maneiras de fazer isso é pelo DOM atraves do elemento body que dispara uma
evento indicando que a carga do documento terminou:
<body onload="funcao()">
A funcao() só será chamada depois da carga completa da página.
3.2-O elemento window do DOM também gera um evento quando o documento foi completamente carregado:
<script>
windows.onload() = function(){...};
</script>
3.3-Outro jeito seria colocar a execução do código JavaScript ao pressionar um botão, num evento do botão (Onclick por exemplo).
O JQuery junto com o Bootstrap se tornaram os frameworks mais utilizados no mundo web porque agregam funcionalidades excelentes e possuem um tamanho minúsculo facilitando o design e funcionamentos das páginas web com um custo baixíssimo.
Você concorda que milhares de pessoas desenvolvem aplicações web e seus scripts todos os dias. Se elas escrevem esses scripts devem, muitas vezes, usar esse script em mais de uma aplicação, certo? Se vão usar diversas vezes porque não fazer uma biblioteca de funções úteis do JavaScript? O JQuery é uma biblioteca de funcionalidades muito úteis e pequena o suficiente para não impactar em nada até os sites dedicados a celulares.
Citando um exemplo típico do JavaScript, muitas vezes temos que esperar a carga da página por completo para rodar um script porque ele irá dar erro se o elemento com que ele interage ainda não existir na carga da página. Se esta funcionalidade é muito útil porque não colocar ela numa biblioteca. Foi isso que fizeram, colocaram no JQuery. O JQuery também implementa, entre muitas outras, funções que aguardam o documento a ser carregado completamente:
window.onload = function() {
};
$(document).ready(function(){...})
ou
$(function(){...})
Importante : Podemos adicionar eventos em qualquer elemento HTML.
Contudo a coisa fica meio obscura para o usuário porque como ele saberia que tem que clicar
numa td como no exemplo abaixo:
<table>
<tr>
<td onclick="alert('oi')">Coluna</td>
</tr>
</table>
Podemos adicionar rotinas de manipulação de eventos a qualquer elemento HTML e estes eventos podem ser 'encadeados' com seus pais ou não.
Os eventos DOM padrão descrevem 3 fases de propagação de eventos:
Fase de captura(capture) - o evento desce para o elemento.
Fase alvo(target) - o evento atingiu o elemento alvo.
Fase de borbulhamento(bubbling) - o evento borbulha do elemento.
Este processo ocorre quando o evento em um elemento filho dispara os mesmos eventos nos
elementos pais.
Quando um evento acontece em um elemento, ele primeiro executa os manipuladores nele, depois
em seu pai e, em seguida, em todos os outros ancestrais.
Exemplo :
<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form onclick="alert('form')">FORM
<div onclick="alert('div')">DIV
<p onclick="alert('p')">P</p>
</div>
</form>
Funcionamento : Bubbling de Eventos
Funcionamento : Eventos Capturing
Importante : Infelizmente o Capturing de Eventos só é acessível através do comando addEventListener.
O blubbling é o default do JavaScript e é facilmente acessível, basta colocar onclick="xxx".
Sabemos que o browser lê todo documento HTML e monta uma representação interna de como ele deve ser renderizado
e para isso cria uma 'representação' deste usando o DOM (Document Object Model) como base.
O JavaScript tem a capacidade de acessar essa representação do DOM e pode manipular essas informações.
Portanto, o JavaScript não acessa uma 'tag' diretamente mas sim a representação desta tag pelo DOM no browser.
Por este motivo, sempre que o JavaScript se refere ao DOM se refere a representação desse objeto do DOM.
Portanto, sempre que o JavaScript acessar algo do DOM ele se refere a um objeto do DOM, que pode ser uma
simples tag mas encapsulada em um objeto do DOM que armazena todas as propriedades, métodos, eventos do objeto.
Como consequencia das afirmações acima, tudo que o JavaScript acessa do DOM são os seus objetos.
Com isto, podemos separar os objetos do DOM referentes ao HTML em 5 tipos de objetos:
São as tags que não são apenas textos mas também definem autoria de texto,
citações a outros sites, siglas, etc. São elas :
acronym, address, cite, code, dfn, del, div, em, ins, kbd, listing, p, plaintext, pre, samp, span, strong, var, xmp.
São tags específicas para formatação de texto que no html5 deveriam estar
apenas na CSS mas ainda funcionam porque são muito práticas para serem usadas. São elas :
b, big, center, i, nobr, rt, ruby, s, small, strike, sub, sup, tt, u, wbr.
São elas :
accessKey, all[], attributes[], baseURI, behaviorUrns[], canHaveChildren, canHaveHTML, childNodes[], children, cite,
className, clientHeight, clientLeft, clientTop, clientWidth, contentEditable, currentStyle, dateTime, dataFld,
dataFormatAs, dataSrc, dir, disabled, document, filters[], firstChild, height, hideFocus, id, innerHTML,
innerText, isContentEditable, isDisabled, isMultiLine, isTextEdit, lang, language, lastChild, length, localName,
namespaceURI, nextSibling, nodeName, nodeType, nodeValue, offsetHeight, offsetLeft, offsetParent, offsetTop,
offsetWidth, outerHTML, outerText, ownerDocument, parentElement, parentNode, parentTextEdit, prefix, previousSibling,
readyState, recordNumber, runtimeStyle, scopeName, scrollHeight, scrollLeft, scrollTop, scrollWidth, sourceIndex,
style, tabIndex, tagName, tagUrn, textContent, title, uniqueID, unselectable, width.
São eles :
addBehavior(), addEventListener(), appendChild(), applyElement(), attachEvent(), blur(), clearAttributes(), click(),
cloneNode(), compareDocumentPosition(), componentFromPoint(), contains(), createControlRange(), detachEvent(),
dispatchEvent(), doScroll(), dragDrop(), fireEvent(), focus(), getAdjacentText(), getAttribute(),
getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getBoundingClientRect(), getClientRects(),
getElementsByTagName(), getElementsByTagNameNS(), getExpression(), getFeature(), getUserData(), hasAttribute(),
hasAttributeNS(), hasAttributes(), hasChildNodes(), insertAdjacentElement(), insertAdjacentHTML(),
insertAdjacentText(), insertBefore(), isDefaultNamespace(), isEqualNode(), isSameNode(), isSupported(), item(),
lookupNamespaceURI(), lookupPrefix(), mergeAttributes(), normalize(), releaseCapture(), removeAttribute(),
removeAttributeNode(), removeAttributeNS(), removeBehavior(), removeChild(), removeEventListener(),
removeExpression(), removeNode(), replaceAdjacentText(), replaceChild(), replaceNode(), scrollIntoView(),
setActive(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS(), setCapture(),
setExpression(), setUserData(), swapNode(), tags(), toString(), urns().
Sâo eles :
onactivate, onafterupdate, onbeforecopy, onbeforecut, onbeforedeactivate, onbeforeeditfocus, onbeforepaste,
onbeforeupdate, onblur, oncellchange, onclick, oncontextmenu, oncontrolselect, oncopy, oncut, ondataavailable,
ondatasetchanged, ondatasetcomplete, ondblclick, ondeactivate, ondrag, ondragend, ondragenter, ondragleave,
ondragover, ondragstart, ondrop, onerrorupdate, onfilterchange, onfocus, onfocusin, onfocusout, onhelp, onkeydown,
onkeypress, onkeyup, onlayoutcomplete, onlosecapture, onmousedown, onmouseenter, onmouseleave, onmousemove,
onmouseout, onmouseover, onmouseup, onmousewheel, onmove, onmoveend, onmovestart, onpaste, onpropertychange,
onreadystatechange, onresize, onresizeend, onresizestart, onrowenter, onrowexit, onrowsdelete, onrowsinserted,
onscroll, onselectstart.
Para conhecer melhor os objetos acima sugerimos escolher o item no índice de funcionalidades por ordem alfabética do JavaScript a seguir : Assunto : JavaScript - 004-Indice Alfabetico